home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 6 / MacMania 6.toast / / Tools&Utilities / EnterAct Stuff / Documentation / Indent User’s Manual < prev    next >
Text File  |  1997-05-26  |  44KB  |  1,311 lines

  1. ****************  Indent User’s Manual  *******************
  2. Copyright © 1997 the Free Software Foundation, Inc. You can
  3. redistribute or modify this file under the terms of the GNU General
  4. Public License as published by the Free Software Foundation (see
  5. the file “COPYING Indent”). font: Geneva 12. Four spaces per tab.
  6.  
  7. This manual is based on "indent.info" as supplied with the
  8. original version of "indent", specifically Edition 1.3, January 1994
  9. for indent Version 1.9.
  10.  
  11. "Indent" is a Drag_on Module, based on the MPW tool version of
  12. "indent" which is widely available (eg at Info-Mac). Indent must be
  13. called by some application, and interaction between Indent and the
  14. application will vary according to how well the calling app
  15. supports text documents. However, virtually any (C or C++ based)
  16. application can add the ability to call Indent. For details you can
  17. model your approach after the section "Calling hAWK from your
  18. application" in the "hAWK User's Manual", which accompanies
  19. EnterAct (free, available at Info-Mac and on the Apprentice CD).
  20.  
  21. Application which support Indent:
  22. Minimal App, EnterAct, RFEdit.
  23.  
  24. Major topics are marked with MPW-compatible marks, available in
  25. many editors by holding down the <Option> or <Command> key while
  26. clicking in the window’s title bar. You can jump to a section
  27. heading by selecting the heading in the table of contents and using
  28. the editor’s “Enter Selection”/“Find Again” commands.
  29.  
  30. Ya but what is it? Indent changes the appearance of a C or C++
  31. program by altering whitespace in accordance with a
  32. particular "style" or collection of options. There are many many
  33. options, and you will find it a bit of a drag to create up your own
  34. set of fine-tuned options to suit your exact needs. However, Indent
  35. does come equipped with some "canned" collections of options
  36. (called "profiles") and you may find that one of them is good
  37. enough.
  38.  
  39. Indent is not, alas, recommended for use with Java.
  40.  
  41. Introduction
  42. ------------
  43. Indent is what they used to call in the old days a "pretty printer",
  44. altering the spaces, tabs, and carriage returns in your source code
  45. to match your preferred style (or at least come close). This
  46. version differs from the MPW tool version in that it supports
  47. C++ (not perfectly, but often good enough) and it has
  48. a dialog interface that allows you to run Indent on one or more
  49. source files with a specific style by clicking the mouse a time
  50. or three.  You can also invoke Indent the old-fashioned way with
  51. a command line.
  52.  
  53. Indent uses the concept of standard input, output, and error, but
  54. strictly in the form of files with the fixed names $tempStdIn,
  55. $tempStdOut, and $tempStdErr. These files are created and written
  56. to as needed, and can be found in the same folder that contains
  57. your “Drag_on Modules” folder after you’ ve begun running Indent
  58. programs. These are temporary files, and will normally be
  59. overwritten by each Indent program run.
  60.  
  61. At present Indent runs only in "immediate" mode, meaning that
  62. your machine is tied up until Indent finishes or you cancel
  63. with a <command><period>. However, it's pretty quick.
  64.  
  65.  
  66. Installation
  67. ------------
  68. As typically shipped, Indent goes inside your "Drag_on Modules"
  69. folder, and this folder should be in the same folder that contains
  70. the calling application, at the same level. The "Indent profiles"
  71. folder should also be in the "Drag_on Modules" folder, and this
  72. manual can go anywhere.
  73.  
  74. To verify that Indent has been installed, start up an application
  75. that can call Indent and then check the menus; you should see
  76. “Indent” as one of the items.
  77.  
  78. Running Indent programs
  79. -----------------------
  80.     Introduction
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95. The Indent "setup" dialog appears when you select Indent from the
  96. calling application's menus. Note if you have selected a
  97. command line beforehand then the dialog will be skipped and Indent
  98. will go straight to the job. Using the dialog rather than bothering
  99. with command lines is the simplest approach to using Indent.
  100.  
  101. Once the dialog appears, you can persuade Indent to do something
  102. with the following four steps:
  103.     • select your preferred "Style" from the top menu (much more
  104.         on styles later, a "style" is a text file containing a list
  105.         of Indent options)
  106.     • use the "Input" popup menu to select your preferred input
  107.     • get your desired output option with the bottom popup
  108.     • and click "Run".
  109.  
  110. Now we'll look at the three popups in turn.
  111.  
  112.     The Style menu
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127. The exact "style" used to set your whitespace is determined by
  128. many options. Rather than having a monstrous dialog with 87 check
  129. boxes and edit fields, Indent takes a complete list of desired
  130. options from a text file. The "profile" files supplied with Indent
  131. can be found in the "Indent profiles" folder, and each one consists
  132. of a list of rather cryptic "command line" style options, which are
  133. spelled out below in the "Indent options" chapter. Once you have a
  134. style you like, you can save it as a profile and then it will appear
  135. in the "Style" menu.
  136.  
  137. The first three styles, GNU, K&R and Bekeley, are the original
  138. "canned" profiles shipped with earlier versions of Indent. You
  139. will probably prefer to use one of the Macintosh-adjusted versions
  140. supplied with this version of Indent, the ".pro" names appearing
  141. at the bottom of the Style menu in the above illustration.
  142.  
  143. But to do better you will need to browse through all of the options
  144. described in the "Indent options" chapter below and come up with
  145. your own ".pro" file.
  146.  
  147.     The Input menu
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161. The Input menu for Indent presents the same options as offered
  162. with hAWK.
  163.  
  164. The options “Front text selection” and “All of front text” refer to
  165. the text window that happens to be in front just before you call
  166. Indent from the calling app’s menu. According to what you select
  167. here, all or just the selected part of the text in the front window
  168. will be written to a temporary file called “$tempStdIn”, and
  169. passed to your program as the input file to use. If your program is
  170. to be run using one of these options, bring the text window
  171. containing the text to be used as input to the front just before
  172. calling Indent, and if you’ll be using the “Front text selection”
  173. option, you should select the text as well.
  174.  
  175. The “MFS selected files” option in the Input popup refers to a list
  176. of files selected in the calling application for multi–file
  177. operations (typically this list is used mainly for multi–file
  178. searching in the calling application, and you construct it by
  179. placing check marks or bullets • beside file names—see the calling
  180. app’s manual for details). With this option selected, all files
  181. selected for multi–file operations will be passed to the Indent
  182. program as input. This means you can set up a list of files in the
  183. calling app, and then have Indent take its input from those files,
  184. from one file to hundreds.
  185.  
  186. The “Select input file…” option allows you to use a standard Open
  187. dialog to pick one specific file to use as input for Indent.
  188.  
  189. Aside from “Select input file…”, input options will not be shown if
  190. they are not currently available.
  191.  
  192. That being said, the allowable output options depend critically
  193. on your choice of input, as told next.
  194.  
  195.     The Output menu
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209. The illustration shows the full range of output options, which
  210. is only available when you use the "Select input file..." option
  211. to pick one file for input.
  212.  
  213. "Back up and overwrite" will replace your input file(s) with the
  214. restyled version, but before doing that it will create a backup copy
  215. of the original in the same folder. The name of the backup file will
  216. contain a version number. Quoting from the full description of
  217. Indent's inner workings below: Numbered backup versions of a file
  218. `momewraths' look like `momewraths.c.~23~', where 23 is the
  219. version of this particular backup. When making a numbered backup
  220. of the file `:src:momewrath.c', the backup file will be named
  221. `:src:momewrath.c.~V~', where V is one greater than the highest
  222. version currently existing in the directory `src'. This option is
  223. available if you have chosen MFS files or one specific file as input.
  224.  
  225. "Rename with number" will leave your original file intact, and
  226. write the restyled version to a file whose name is the original
  227. name but with a version number appended just before the file
  228. extension, eg "File.cp" will be restyled as "File~1.cp", "File~1.cp"
  229. as "File~2.cp" etc, again in the same folder as the original. This
  230. option is available only if you chose one specific file for input
  231. using the "Select input file..." input option.
  232.  
  233. "To $tempStdOut" will write all output to the $tempStdOut file,
  234. a file which is also used for output by hAWK, so the results
  235. there will be temporary. The calling application will (probably)
  236. show you this file after Indent is done. This option is available
  237. for one specific input file, and also if you have selected all
  238. or part of the front file for input.
  239.  
  240. Creating Indent profiles
  241. ------------------------
  242. This would all be trivial if you just had a style in the can that
  243. you liked, wouldn't it?
  244.  
  245. Your best approach to creating your preferred ".pro" file is to try
  246. out the supplied styles until you find one that's close to your ideal
  247. (use "Select input file...." with the "Rename with number" output
  248. option to avoid altering any original file just yet). Then cruise
  249. through the detailed options below to find the ones you need
  250. to change to make your profile perfect.
  251.  
  252. To create your own Indent profile:
  253.     • it must be a TEXT file with name ending in ".pro"
  254.     • for easiest access, place it in your "Indent profiles" folder
  255.     • in the file, put a complete list of options describing your
  256.         preferred style.
  257.  
  258. If you place your profile in your "Indent profiles" folder,
  259. then it will appear in Indent's "Style" popup.
  260.  
  261. For example, here is the complete "macGNU.pro" style:
  262.  
  263. -nbad -bap -nbc -bl -bli2 -c50 -cd50 -ncdb -nce -cli0
  264. -cp1 -di2 -nfc1 -nfca -i2 -ip5 -lp -npcs -psl -cs
  265. -nsc -nsob -nss -d0 -ci0 -l84 -ts4
  266.  
  267. Whatever style you create, you should include these options:
  268.     • -npcs ( --no-space-after-function-call-names): Indent is
  269.     a bit dumb about some things, best to suppress spaces after
  270.     procedure names, otherwise it will put spaces after macro
  271.     name too (ouch).
  272.     • -ts4 (4 spaces per tab): unless your files typically contain
  273.     some other number of spaces per tab, put this option in.
  274.     Without it, the default is 8 spaces per tab.
  275.     • -l84 (maximum line length 84 characters): the default is
  276.     78 characters, yer author prefers 84 but somewhere between
  277.     75 and 86 is what you will want.
  278.     
  279. For all the gory details, please see the "Indent options" chapter
  280. below.
  281.  
  282. However if you want to take a quick and dirty approach you can
  283. listen in now as I quickly go through all the important options
  284. while trying to approximate my own preferred style, which
  285. resembles the standard GNU style:
  286.  
  287. -bad : blank line after block of decls: YES
  288. -bap : blank line after every procedure body: YES
  289. -sob : swallow extra blank lines: NO, use -nsob
  290.  
  291. -faa, -fc1 : format comments, NO leave them out
  292. -lN : maximum line length, use -l84
  293. -lcN : comment line length, NO (-l84 will apply)
  294. -dN : unident comment by: NO, use -d0 (zero)
  295. -c40, -cd40,-cp40 for trailing comment positions
  296. -cdb : comment delim on separate line: NO, -ncdb
  297. -sc : stars at beginnings of comment lines: NO, leave it out
  298.  
  299. -br (right) vs -bl : I like bl (brace under if () on new line),
  300.  if you want '{' on same line as "if" then use -br
  301. -bliN : Indent braces N spaces, use -bli0 (none)
  302. -ce : cuddle else : NO, use -nce
  303. -cli : use -cli0 (zero) to indent case labels
  304. -ss : no big deal, use it
  305. -pcs : blank after procedure name : NO, use -npcs
  306.  (otherwise macro names get space after too)
  307. -cs : space after cast: NO, leave it out
  308. -bs : no big deal, leave it out
  309.  
  310. -di : identifier indent: hmmm, try -di16
  311. -bc : newline after each comma in decl: YES
  312. -psl : function return type on separate line: NO, use -npsl
  313. -tsN : tab stop in input/output, use -ts4
  314. -iN : indentation level: use -i4 (one tab in)
  315. -ciN : continued statement indent: use -ci4
  316. -lp : indent after left paren: YES
  317. -ip : old-style decl indent, no big deal use -ip4
  318. -T : if using EnterAct, these not needed.
  319.  
  320. My approximate style, in summary:
  321. -bad -bap -nsob -l84 -d0 -c40 -cd40 -cp40 -ncdb -bl -bli0 -nce
  322. -cli0 -ss -npcs -di16 -bc -npsl -ts4 -i4 -ci4 -lp -ip4 -eei4
  323.  
  324. (saved as "Ken.pro" in the "Indent profiles" folder)
  325.  
  326. Mystery options:
  327. -eei : extra expression indent, not sure yet what it does....
  328.  
  329. Calling Indent with a command line
  330. ----------------------------------
  331. Your calling application's manual should also have details on
  332. how to call Indent using a command line. This manual just
  333. deals with what can appear on a command line, not how you
  334. instruct your application to treat it as a command line.
  335.  
  336. A typical command line to invoke Indent looks like
  337.     Indent "macBerkeley.pro"
  338.     "Atlas:CW CEDAR:Indent test files:FindScreen.c"
  339.     -o "Atlas:CW CEDAR:Indent test files:FindScreen1.c"
  340. (well actually that was three lines, but that should be OK
  341. with your calling application)
  342.  
  343. After the name "Indent" itself, you specify a ".pro" file
  344. to use for the style options, one or more input files,
  345. and then the output.
  346.  
  347. Here are the rules for cooking up a command line:
  348.     • the command line should start with "Indent" followed
  349.     by at least one space.
  350.     • with more than one input file your only output option is
  351.     the equivalent of "Back up and overwrite". This is the
  352.     default behaviour, and there is no way to explicitly
  353.     specify it.
  354.     • no "standard input" options are available, in particular
  355.     you can't take input from part of all of the front file
  356.     (anyway, the front file is typically the one you type the
  357.     command line in)
  358.     • the "Rename with number" option is not available. Instead
  359.     you can explicitly give a name to the restyled version by
  360.     using "-o" followed by the new name. This renaming option
  361.     is only valid if you explictly specify exactly one file for
  362.     input.
  363.     • to use the calling application's multi-file selection for
  364.     input, place "MFS" or "-MFS" on the command line. With
  365.     this option you cannot specify naming options for the
  366.     output files, "Back up and overwrite" is always used.
  367.     • if input is from one file you may specify output to
  368.     "$tempStdOut" by using the option "-st".
  369.     • quotes around file names (including profile names) are
  370.     needed only if the path name or file name contains spaces.
  371.     • if you specify a profile from your "Indent profiles" folder
  372.     you don't need to include the full path. Otherwise, you do.
  373.     • all explicitly named input and output files should have
  374.     full path names.
  375.     • since the full path names can make the command line
  376.     quite long, your calling app will probably allow you to
  377.     split the command line over several actual lines.
  378.  
  379. The command line that's most useful is
  380.     Indent myProfile.pro -MFS
  381. which will read options from the profile "myProfile.pro" in
  382. your "Indent profiles" folder (supply a real profile name there)
  383. and crank away on all files selected for multi-file operations
  384. in the calling app, making backups and overwriting the files
  385. with restyled versions.
  386.  
  387. Come to think of it, that's probably the only useful one.
  388.  
  389. No doubt you're aching to know what all the options are,
  390. so away we go....
  391.  
  392. Indent options
  393. --------------
  394. (Following text is borrowed from the original "indent.info"
  395. manual that ships with the MPW version of Indent. Some minor
  396. changes have been made, mainly removal of unixisms.)
  397.  
  398. Backup Files
  399. ============
  400.  
  401.    As of version 1.3, GNU `indent' makes GNU-style backup files,
  402.    the same way GNU Emacs does. This means that either "simple"
  403.    or "numbered" backup filenames may be made.
  404.  
  405.    Simple backup file names are generated by appending a suffix to
  406.    the original file name. The default for the this suffix is the
  407.    one-character string `~' (tilde). Thus, the backup file for
  408.    `python.c' would be `python.c~'.
  409.  
  410.    Instead of the default, you may specify any string as a suffix by
  411.    setting the environment variable `SIMPLE_BACKUP_SUFFIX' to
  412.    your preferred suffix.
  413.  
  414.    Numbered backup versions of a file `momewraths' look like
  415.    `momewraths.c.~23~', where 23 is the version of this particular
  416.    backup. When making a numbered backup of the file
  417.    `:src:momewrath.c', the backup file will be named
  418.    `:src:momewrath.c.~V~', where V is one greater than the highest
  419.    version currently existing in the directory `src'.
  420.  
  421.    The type of backup file made is controlled by the value of the
  422.    environment variable `VERSION_CONTROL'. If it is the string
  423.    `simple', then only simple backups will be made. If its value is
  424.    the string `numbered', then numbered backups will be made. If
  425.    its value is `numbered-existing', then numbered backups will be
  426.    made if there *already exist* numbered backups for the file
  427.    being indented; otherwise, a simple backup is made. If
  428.    `VERSION_CONTROL' is not set, then `indent' assumes the
  429.    behaviour of `numbered-existing'.
  430.  
  431.    Other versions of `indent' use the suffix `.BAK' in naming backup
  432.    files. This behaviour can be emulated by setting
  433.    `SIMPLE_BACKUP_SUFFIX' to `.BAK'.
  434.  
  435.    Note also that other versions of `indent' make backups in the
  436.    current directory, rather than in the directory of the source file
  437.    as GNU `indent' now does.
  438.  
  439. Common styles
  440. =============
  441.  
  442.    There are several common styles of C code, including the GNU
  443.    style, the Kernighan & Ritchie style, and the original Berkeley
  444.    style. A style may be selected with a single "background" option,
  445.    which specifies a set of values for all other options. However,
  446.    explicitly specified options always override options implied by
  447.    a background option.
  448.  
  449.    As of version 1.2, the default style of GNU `indent' is the GNU
  450.    style. Thus, it is no longer neccessary to specify the option
  451.    `-gnu' to obtain this format, although doing so will not cause an
  452.    error. Option settings which correspond to the GNU style are:
  453.  
  454.      -nbad -bap -nbc -bl -bli2 -c33 -cd33 -ncdb -nce -cli0
  455.      -cp1 -di2 -nfc1 -nfca -i2 -ip5 -lp -pcs -psl -cs
  456.      -nsc -nsob -nss -ts8 -d0 -ci0 -l78
  457.  
  458.    The GNU coding style is that preferred by the GNU project. It is
  459.    the style that the GNU Emacs C mode encourages and which is
  460.    used in the C portions of GNU Emacs. (People interested in
  461.    writing programs for Project GNU should get a copy of `The GNU
  462.    Coding Standards', which also covers semantic and portability
  463.    issues such as memory usage, the size of integers, etc.)
  464.  
  465.    The Kernighan & Ritchie style is used throughout their
  466.    well-known book `The C Programming Language'. It is enabled
  467.    with the `-kr' option. The Kernighan & Ritchie style corresponds
  468.    to the following set of options:
  469.  
  470.      -nbad -bap -nbc -br -c33 -cd33 -ncdb -ce -ci4
  471.      -cli0 -cp33 -d0 -di1 -nfc1 -nfca -i4 -ip0 -l75 -lp
  472.      -npcs -npsl -nsc -nsob -nss -ts8 -cs
  473.  
  474.    Kernighan & Ritchie style does not put comments to the right of
  475.    code in the same column at all times (nor does it use only one
  476.    space to the right of the code), so for this style `indent' has
  477.    arbitrarily chosen column 33.
  478.  
  479.    The style of the original Berkeley `indent' may be obtained by
  480.    specifying `-orig' (or by specifyfying `--original', using the long
  481.    option name). This style is equivalent to the following settings:
  482.  
  483.      -nbap -nbad -bc -br -c33 -cd33 -cdb -ce -ci4
  484.      -cli0 -cp33 -d4 -di16 -fc1 -fca -i4 -ip4 -l75 -lp
  485.      -npcs -psl -sc -nsob -nss -ts8 -ncs
  486.  
  487. Blank lines
  488. ===========
  489.  
  490.    Various programming styles use blank lines in different places.
  491.    `indent' has a number of options to insert or delete blank lines in
  492.    specific places.
  493.  
  494.    The `-bad' option causes `indent' to force a blank line after every
  495.    block of declarations. The `-nbad' option causes `indent' not to
  496.    force such blank lines.
  497.  
  498.    The `-bap' option forces a blank line after every procedure body.
  499.    The `-nbap' option forces no such blank line.
  500.  
  501.    The `-sob' option causes `indent' to swallow optional blank lines
  502.    (that is, any optional blank lines present in the input will be
  503.    removed from the output). If the `-nsob' is specified, any blank
  504.    lines present in the input file will be copied to the output file.
  505.  
  506. -blank-lines-after-declarations
  507. -------------------------------
  508.  
  509.    The `-bad' option forces a blank line after every block of
  510. declarations.  The `-nbad' option does not add any such blank lines.
  511.  
  512.    For example, given the input
  513.      char *foo;
  514.      char *bar;
  515.      /* This separates blocks of declarations.  */
  516.      int baz;
  517.  
  518. `indent -bad' produces
  519.  
  520.      char *foo;
  521.      char *bar;
  522.      
  523.      /* This separates blocks of declarations.  */
  524.      int baz;
  525.  
  526. and `indent -nbad' produces
  527.  
  528.      char *foo;
  529.      char *bar;
  530.      /* This separates blocks of declarations.  */
  531.      int baz;
  532.  
  533. -blank-lines-after-procedures
  534. -----------------------------
  535.  
  536.    The `-bap' option forces a blank line after every procedure body.
  537.  
  538.    For example, given the input
  539.  
  540.      int
  541.      foo ()
  542.      {
  543.        puts("Hi");
  544.      }
  545.      /* The procedure bar is even less interesting.  */
  546.      char *
  547.      bar ()
  548.      {
  549.        puts("Hello");
  550.      }
  551.  
  552. `indent -bap' produces
  553.  
  554.      int
  555.      foo ()
  556.      {
  557.        puts ("Hi");
  558.      }
  559.      
  560.      /* The procedure bar is even less interesting.  */
  561.      char *
  562.      bar ()
  563.      {
  564.        puts ("Hello");
  565.      }
  566.  
  567. and `indent -nbap' produces
  568.  
  569.      int
  570.      foo ()
  571.      {
  572.        puts ("Hi");
  573.      }
  574.      /* The procedure bar is even less interesting.  */
  575.      char *
  576.      bar ()
  577.      {
  578.        puts ("Hello");
  579.      }
  580.  
  581. No blank line will be added after the procedure `foo'.
  582.  
  583. Comments
  584. ========
  585.  
  586.    `indent' formats both C and C++ comments. C comments are
  587.    begun with `/*' and terminated with `*/' and may contain
  588.    newline characters. C++ comments begin with the delimiter `//'
  589.    and end at the newline.
  590.  
  591.    `indent' handles comments differently depending upon their
  592.    context. `indent' attempts to distinguish amongst comments
  593.    which follow statements, comments which follow declarations,
  594.    comments following preprocessor directives, and comments
  595.    which are not preceded by code of any sort, i.e., they begin the
  596.    text of the line (although not neccessarily in column 1).
  597.  
  598.    `indent' further attempts to leave "boxed comments" unmodified.
  599.    The general idea of such a comment is that it is enclosed in a
  600.    rectangle or "box" of stars or dashes to visually set it apart.
  601.    More precisely, boxed comments are defined as those in which
  602.    the initial `/*' is followed immediately by the character `*', `=',
  603.    `_', or `-', or those in which the beginning comment delimiter
  604.    (`/*') is on a line by itself, and the following line begins with a
  605.    `*' in the same column as the star of the opening delimiter.
  606.  
  607.    Examples of boxed comments are:
  608.  
  609.      /**********************
  610.       * Comment in a box!! *
  611.       **********************/
  612.      
  613.             /*
  614.              * A different kind of scent,
  615.              * for a different kind of comment.
  616.              */
  617.  
  618.    `indent' attempts to leave boxed comments exactly as they are
  619.    found in the source file. Thus the indentation of the comment is
  620.    unchanged, and its length is not checked in any way. The only
  621.    alteration made is that an embedded tab character may be
  622.    converted into the appropriate number of spaces.
  623.  
  624.    Comments which are not boxed may be formatted, which means
  625.    that the line is broken to fit within a right margin and
  626.    left-filled with whitespace. Single newlines are equivalent to a
  627.    space, but blank lines (two or more newlines in a row) are taken
  628.    to mean a paragraph break. Formatting of comments which begin
  629.    after the first column is enabled with the `-fca' option. To
  630.    format those beginning in column one, specify `-fc1'. Such
  631.    formatting is disabled by default.
  632.  
  633.    The right margin for formatting defaults to 78, but may be
  634.    changed with the `-lc' or the `-l' option. `-l' specifies the right
  635.    margin for all code, and `-lc' specifies the margin for only for
  636.    comments. If `-l' is used alone, comments will be formatted
  637.    according to the margin specified with that option.
  638.  
  639.    If the margin specified does not allow the comment to be
  640.    printed, the margin will be automatically extended for the
  641.    duration of that comment. The margin is not respected if the
  642.    comment is not being formatted.
  643.  
  644.    If the comment begins a line (i.e., there is no program text to its
  645.    left), it will be indented to the column it was found in unless
  646.    the comment is within a block of code. In that case, such a
  647.    comment will be aligned with the indented code of that block.
  648.    This alignment may be affected by the `-d' option, which
  649.    specifies an amount by which such comments are moved to the
  650.    *left*, or unindented. For example, `-d2' places comments two
  651.    spaces to the left of code. By default, comments are aligned
  652.    with code.
  653.  
  654.    Comments to the right of code will appear by default in column
  655.    33. This may be changed with one of three options. `-c' will
  656.    specify the column for comments following code, `-cd' specifies
  657.    the column for comments following declarations, and `-cp'
  658.    specifies the column for comments following preprocessor
  659.    directives `#else' and `#endif'.
  660.  
  661.    If the code to the left of the comment exceeds the beginning
  662.    column, the comment column will be extended to the next
  663.    tabstop column past the end of the code, or in the case of
  664.    preprocessor directives, to one space past the end of the
  665.    directive. This extension lasts only for the output of that
  666.    particular comment.
  667.  
  668.    The `-cdb' option places the comment delimiters on blank lines.
  669.    Thus, a single line comment like `/* Claustrophobia */' can be
  670.    transformed into:
  671.  
  672.      /*
  673.         Claustrophobia
  674.       */
  675.  
  676.    Stars can be placed at the beginning of multi-line comments
  677.    with the `-sc' option. Thus, the single-line comment above can
  678.    be transformed (with `-cdb -sc') into:
  679.  
  680.      /*
  681.       * Claustrophobia
  682.       */
  683.  
  684. Statements
  685. ==========
  686.  
  687.    The `-br' or `-bl' option specifies how to format braces.
  688.  
  689.    The `-br' option formats statement braces like this:
  690.  
  691.      if (x > 0) {
  692.        x--;
  693.      }
  694.  
  695. The `-bl' option formats them like this:
  696.  
  697.      if (x > 0)
  698.        {
  699.          x--;
  700.        }
  701.  
  702.    These options also affect structure and enumeration
  703.    declarations. The `-br' option produces structure declarations
  704.    like the following:
  705.  
  706.      struct Sname {
  707.          int i;
  708.          char chp;
  709.      } Vname;
  710.  
  711.    The default behaviour, also obtained by specifying `-bl', would
  712.    yield the following format for the same declaration:
  713.  
  714.      struct Sname
  715.        {
  716.           int i;
  717.           char chp;
  718.        }
  719.      Vname;
  720.  
  721.    If you use the `-bl' option, you may also want to specify the
  722.    `-bli' option. This option specifies the number of spaces by
  723.    which braces are indented. `-bli2', the default, gives the result
  724.    shown above. `-bli0' results in the following:
  725.  
  726.      if (x > 0)
  727.      {
  728.        x--;
  729.      }
  730.  
  731.    If you are using the `-br' option, you probably want to also use
  732.    the `-ce' option. This causes the `else' in an if-then-else
  733.    construct to cuddle up to the immediately preceding `}'. For
  734.    example, with `-br -ce' you get the following:
  735.  
  736.      if (x > 0) {
  737.        x--;
  738.      } else {
  739.        fprintf (stderr, "...something wrong?\n");
  740.      }
  741.  
  742. With `-br -nce' that code would appear as
  743.  
  744.      if (x > 0) {
  745.        x--;
  746.      }
  747.      else {
  748.        fprintf (stderr, "...something wrong?\n");
  749.      }
  750.  
  751.    The `-cli' option specifies the number of spaces that case labels
  752.    should be indented to the right of the containing `switch'
  753.    statement.
  754.  
  755.    If a semicolon is on the same line as a `for' or `while' statement,
  756.    the `-ss' option will cause a space to be placed before the
  757.    semicolon. This emphasizes the semicolon, making it clear that
  758.    the body of the `for' or `while' statement is an empty statement.
  759.    `-nss' disables this feature.
  760.  
  761.    The `-pcs' option causes a space to be placed between the name
  762.    of the procedure being called and the `(' (for example, `puts
  763.    ("Hi");'. The `-npcs' option would give `puts("Hi");').
  764.  
  765.    If the `-cs' option is specified, `indent' puts a space after a cast
  766.    operator.
  767.  
  768.    The `-bs' option ensures that there is a space between the
  769.    keyword `sizeof' and its argument. In some versions, this is
  770.    known as the `Bill_Shannon' option.
  771.  
  772. Declarations
  773. ============
  774.  
  775.    By default `indent' will line up identifiers, in the column
  776.    specified by the `-di' option. For example, `-di16' makes things
  777.    look like:
  778.  
  779.      int             foo;
  780.      char           *bar;
  781.  
  782.    Using a small value (such as one or two) for the `-di' option can
  783.    be used to cause the indentifiers to be placed in the first
  784.    available position, for example
  785.  
  786.      int foo;
  787.      char *bar;
  788.  
  789.    The value given to the `-di' option will still affect variables
  790.    which are put on separate lines from their types, for example
  791.    `-di2' will lead to
  792.  
  793.      int
  794.        foo;
  795.  
  796.    If the `-bc' option is specified, a newline is forced after each
  797.    comma in a declaration. For example,
  798.  
  799.      int a,
  800.        b,
  801.        c;
  802.  
  803. With the `-nbc' option this would look like
  804.  
  805.      int a, b, c;
  806.  
  807.    The `-psl' option causes the type of a procedure being defined to
  808.    be placed on the line before the name of the procedure. This
  809.    style is required for the `etags' program to work correctly, as
  810.    well as some of the `c-mode' functions of Emacs.
  811.  
  812.    If you are not using the `-di1' option to place variables being
  813.    declared immediately after their type, you need to use the `-T'
  814.    option to tell `indent' the name of all the typenames in your
  815.    program that are defined by `typedef'. `-T' can be specified more
  816.    than once, and all names specified are used. For example, if your
  817.    program contains
  818.  
  819.      typedef unsigned long CODE_ADDR;
  820.      typedef enum {red, blue, green} COLOR;
  821.  
  822. you would use the options `-T CODE_ADDR -T COLOR'.
  823.  
  824. Indentation
  825. ===========
  826.  
  827.    One issue in the formatting of code is how far each line should
  828.    be indented from the left margin. When the beginning of a
  829.    statement such as `if' or `for' is encountered, the indentation
  830.    level is increased by the value specified by the `-i' option. For
  831.    example, use `-i8' to specify an eight character indentation for
  832.    each level. When a statement is broken across two lines, the
  833.    second line is indented by a number of additional spaces
  834.    specified by the `-ci' option. `-ci' defaults to 0. However, if the
  835.    `-lp' option is specified, and a line has a left parenthesis which
  836.    is not closed on that line, then continuation lines will be lined
  837.    up to start at the character position just after the left
  838.    parenthesis. This processing also applies to `[' and applies to `{'
  839.    when it occurs in initialization lists. For example, a piece of
  840.    continued code might look like this with `-nlp -ci3' in effect:
  841.  
  842.        p1 = first_procedure (second_procedure (p2, p3),
  843.           third_procedure (p4, p5));
  844.  
  845. With `-lp' in effect the code looks somewhat clearer:
  846.  
  847.        p1 = first_procedure (second_procedure (p2, p3),
  848.                              third_procedure (p4, p5));
  849.  
  850.    `indent' assumes that tabs are placed at regular intervals of
  851.    both input and output character streams. These intervals are by
  852.    default 8 columns wide, but (as of version 1.2) may be changed
  853.    by the `-ts' option. Tabs are treated as the equivalent number of
  854.    spaces.
  855.  
  856.    The indentation of type declarations in old-style function
  857.    definitions is controlled by the `-ip' parameter. This is a
  858.    numeric parameter specifying how many spaces to indent type
  859.    declarations. For example, the default `-ip5' makes definitions
  860.    look like this:
  861.  
  862.      char *
  863.      create_world (x, y, scale)
  864.           int x;
  865.           int y;
  866.           float scale;
  867.      {
  868.        . . .
  869.      }
  870.  
  871.    For compatibility with other versions of indent, the option `-nip'
  872.    is provided, which is equivalent to `-ip0'.
  873.  
  874.    ASCII C allows white space to be placed on preprocessor
  875.    command lines between the character `#' and the command name.
  876.    By default, `indent' removes this space, but specifying the `-lps'
  877.    option directs `indent' to leave this space unmodified.
  878.  
  879. Disabling Formatting
  880. ====================
  881.  
  882.    Formatting of C code may be disabled for portions of a program
  883.    by embedding special "control comments" in the program. To turn
  884.    off formatting for a section of a program, place the disabling
  885.    control comment `/* *INDENT-OFF* */' on a line by itself just
  886.    before that section. Program text scanned after this control
  887.    comment is output precisely as input with no modifications
  888.    until the corresponding enabling comment is scanned on a line by
  889.    itself. The disabling control comment is `/* *INDENT-ON* */',
  890.    and any text following the comment on the line is also output
  891.    unformatted. Formatting begins again with the input line
  892.    following the enabling control comment.
  893.  
  894.    More precisely, `indent' does not attempt to verify the closing
  895.    delimiter (`*/') for these C comments, and any whitespace on
  896.    the line is totally transparent.
  897.  
  898.    These control comments also function in their C++ formats,
  899.    namely
  900. `// *INDENT-OFF*' and `// *INDENT-ON*'.
  901.  
  902.    It should be noted that the internal state of `indent' remains
  903.    unchanged over the course of the unformatted section. Thus, for
  904.    example, turning off formatting in the middle of a function and
  905.    continuing it after the end of the function may lead to bizarre
  906.    results. It is therefore wise to be somewhat modular in
  907.    selecting code to be left unformatted.
  908.  
  909.    As a historical note, some earlier versions of `indent' produced
  910.    error messages beginning with `*INDENT**'. These versions of
  911.    `indent' were written to ignore any input text lines which began
  912.    with such error messages. I have removed this incestuous
  913.    feature from `GNU indent'.
  914.  
  915. Miscellaneous options
  916. =====================
  917.  
  918.    To find out what version of `indent' you have, use the command
  919.    `indent -version'. This will report the version number of `indent',
  920.    without doing any of the normal processing.
  921.  
  922.    The `-v' option can be used to turn on verbose mode. When in
  923.    verbose mode, `indent' reports when it splits one line of input
  924.    into two more more lines of output, and gives some size
  925.    statistics at completion.
  926.  
  927. Bugs
  928. ====
  929.  
  930.    The "-troff" option is strongly deprecated, and is not supported.
  931.    A good thing for someone to do is to rewrite `indent' to generate
  932.    TeX source as a hardcopy output option, amoung other things.
  933.  
  934. Copyright
  935. =========
  936.  
  937.    The following copyright notice applies to the `indent' program.
  938.    The copyright and copying permissions for this manual appear
  939.    near the beginning of this document.
  940.  
  941.      Copyright (c) 1989, 1992 Free Software Foundation
  942.      Copyright (c) 1985 Sun Microsystems, Inc.
  943.      Copyright (c) 1980 The Regents of the University of California.
  944.      Copyright (c) 1976 Board of Trustees of the University of Illinois.
  945.      All rights reserved.
  946.      
  947.      Redistribution and use in source and binary forms are
  948.      permitted provided that the above copyright notice and this
  949.      paragraph are duplicated in all such forms and that any
  950.      documentation, advertising materials, and other materials
  951.      related to such distribution and use acknowledge that the
  952.      software was developed by the University of California,
  953.      Berkeley, the University of Illinois, Urbana, and Sun
  954.      Microsystems, Inc. The name of either University or Sun
  955.      Microsystems may not be used to endorse or promote products
  956.      derived from this software without specific prior written
  957.      permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND
  958.      WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
  959.      WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  960.      MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  961.  
  962. Option Summary
  963. **************
  964.  
  965.    Here is a list of all the options for `indent', alphabetized by
  966. short option.  It is followed by a cross key alphabetized by long
  967. option.
  968.  
  969. `-bad'
  970. `--blank-lines-after-declarations'
  971.      Force blank lines after the declarations.
  972.      *Note Blank lines::.
  973.  
  974. `-bap'
  975. `--blank-lines-after-procedures'
  976.      Force blank lines after procedure bodies.
  977.      *Note Blank lines::.
  978.  
  979. `-bbb'
  980. `--blank-lines-after-block-comments'
  981.      Force blank lines after block comments.
  982.      *Note Blank lines::.
  983.  
  984. `-bc'
  985. `--blank-lines-after-commas'
  986.      Force newline after comma in declaration.
  987.      *Note Declarations::.
  988.  
  989. `-bl'
  990. `--braces-after-if-line'
  991.      Put braces on line after `if', etc.
  992.      *Note Statements::.
  993.  
  994. `-bliN'
  995. `--brace-indentN'
  996.      Indent braces N spaces.
  997.      *Note Statements::.
  998.  
  999. `-br'
  1000. `--braces-on-if-line'
  1001.      Put braces on line with `if', etc. and structure declarations
  1002.      *Note Statements::.
  1003.  
  1004. `-cN'
  1005. `--comment-indentationN'
  1006.      Put comments to the right of code in column N.
  1007.      *Note Comments::.
  1008.  
  1009. `-cdN'
  1010. `--declaration-comment-columnN'
  1011.      Put comments to the right of the declarations in column N.
  1012.      *Note Comments::.
  1013.  
  1014. `-cdb'
  1015. `--comment-delimiters-on-blank-lines'
  1016.      Put comment delimiters on blank lines.
  1017.      *Note Comments::.
  1018.  
  1019. `-ce'
  1020. `--cuddle-else'
  1021.      Cuddle else and preceeding `}'.
  1022.      *Note Comments::.
  1023.  
  1024. `-ciN'
  1025. `--continuation-indentationN'
  1026.      Continuation indent of N spaces.
  1027.      *Note Statements::.
  1028.  
  1029. `-cliN'
  1030. `--case-indentationN'
  1031.      Case label indent of N spaces.
  1032.      *Note Statements::.
  1033.  
  1034. `-cpN'
  1035. `--else-endif-columnN'
  1036.      Put comments to the right of `#else' and `#endif' statements in
  1037.      column N.
  1038.      *Note Comments::.
  1039.  
  1040. `-cs'
  1041. `--space-after-cast'
  1042.      Put a space after a cast operator.
  1043.      *Note Statements::.
  1044.  
  1045. `-bs'
  1046. `--blank-before-sizeof'
  1047.      Put a space between `sizeof' and its argument.
  1048.      *Note Statements::
  1049.  
  1050. `-dN'
  1051. `--line-comments-indentationN'
  1052.      Set indentation of comments not to the right of code to N spaces.
  1053.      *Note Comments::.
  1054.  
  1055. `-diN'
  1056. `--declaration-indentationN'
  1057.      Put variables in column N.
  1058.      *Note Declarations::.
  1059.  
  1060. `-fc1'
  1061. `--format-first-column-comments'
  1062.      Format comments in the first column.
  1063.      *Note Comments::.
  1064.  
  1065. `-fca'
  1066. `--format-all-comments'
  1067.      Do not disable all formatting of comments.
  1068.      *Note Comments::
  1069.  
  1070. `-gnu'
  1071. `--gnu-style'
  1072.      Use GNU coding style.  This is the default.
  1073.      *Note Common styles::.
  1074.  
  1075. `-iN'
  1076. `--indent-levelN'
  1077.      Set indentation level to N spaces.
  1078.      *Note Indentation::.
  1079.  
  1080. `-ipN'
  1081. `--parameter-indentationN'
  1082.      Indent parameter types in old-style function definitions by N
  1083.      spaces.
  1084.      *Note Indentation::.
  1085.  
  1086. `-kr'
  1087. `--k-and-r-style'
  1088.      Use Kernighan & Ritchie coding style.
  1089.      *Note Common styles::.
  1090.  
  1091. `-lN'
  1092. `--line-lengthN'
  1093.      Set maximum line length to N.
  1094.      *Note Comments::.
  1095.  
  1096. `-lcN'
  1097. `--comment-line-lengthN'
  1098.      Set maximum line length for comment formatting to N.
  1099.      *Note Comments::.
  1100.  
  1101. `-lp'
  1102. `--continue-at-parentheses'
  1103.      Line up continued lines at parentheses.
  1104.      *Note Indentation::.
  1105.  
  1106. `-lps'
  1107. `--leave-preprocessor-space'
  1108.      Leave space between `#' and preprocessor directive.  *Note
  1109.      Indentation::.
  1110.  
  1111. `-nbad'
  1112. `--no-blank-lines-after-declarations'
  1113.      Do not force blank lines after declarations.
  1114.      *Note Blank lines::.
  1115.  
  1116. `-nbap'
  1117. `--no-blank-lines-after-procedures'
  1118.      Do not force blank lines after procedure bodies.
  1119.      *Note Blank lines::.
  1120.  
  1121. `-nbc'
  1122. `--no-blank-lines-after-commas'
  1123.      Do not force newlines after commas in declarations.
  1124.      *Note Declarations::.
  1125.  
  1126. `-ncdb'
  1127. `--no-comment-delimiters-on-blank-lines'
  1128.      Do not put comment delimiters on blank lines.
  1129.      *Note Comments::.
  1130.  
  1131. `-nce'
  1132. `--dont-cuddle-else'
  1133.      Do not cuddle `}' and `else'.
  1134.      *Note Statements::.
  1135.  
  1136. `-ncs'
  1137. `--no-space-after-casts'
  1138.      Do not put a space after cast operators.
  1139.      *Note Statements::.
  1140.  
  1141. `-nfc1'
  1142. `--dont-format-first-column-comments'
  1143.      Do not format comments in the first column as normal.
  1144.      *Note Comments::.
  1145.  
  1146. `-nfca'
  1147. `--dont-format-comments'
  1148.      Do not format any comments.
  1149.      *Note Comments::.
  1150.  
  1151. `-nip'
  1152. `--no-parameter-indentation'
  1153.      Zero width indentation for parameters.
  1154.      *Note Indentation::
  1155.  
  1156. `-nlp'
  1157. `--dont-line-up-parentheses'
  1158.      Do not line up parentheses.
  1159.      *Note Statements::.
  1160.  
  1161. `-npcs'
  1162. `--no-space-after-function-call-names'
  1163.      Do not put space after the function in function calls.
  1164.      *Note Statements::.
  1165.  
  1166. `-npsl'
  1167. `--dont-break-procedure-type'
  1168.      Put the type of a procedure on the same line as its name.
  1169.      *Note Declarations::.
  1170.  
  1171. `-nsc'
  1172. `--dont-star-comments'
  1173.      Do not put the `*' character at the left of comments.
  1174.      *Note Comments::.
  1175.  
  1176. `-nsob'
  1177. `--leave-optional-blank-lines'
  1178.      Do not swallow optional blank lines.
  1179.      *Note Blank lines::.
  1180.  
  1181. `-nss'
  1182. `--dont-space-special-semicolon'
  1183.      Do not force a space before the semicolon after certain
  1184.          statements.
  1185.      Disables `-ss'.
  1186.      *Note Statements::.
  1187.  
  1188. `-nv'
  1189. `--no-verbosity'
  1190.      Disable verbose mode. *Note Miscellaneous options::.
  1191.  
  1192. `-orig'
  1193. `--original'
  1194.      Use the original Berkeley coding style.
  1195.      *Note Common styles::.
  1196.  
  1197. `-npro'
  1198. `--ignore-profile'
  1199.      Do not read `.indent.pro' files.
  1200.      *Note Invoking indent::.
  1201.  
  1202. `-pcs'
  1203. `--space-after-procedure-calls'
  1204.      Insert a space between the name of the procedure being
  1205.          called and the `('.
  1206.      *Note Statements::.
  1207.  
  1208. `-psl'
  1209. `--procnames-start-lines'
  1210.      Put the type of a procedure on the line before its name.
  1211.      *Note Declarations::.
  1212.  
  1213. `-sc'
  1214. `--start-left-side-of-comments'
  1215.      Put the `*' character at the left of comments.
  1216.      *Note Comments::.
  1217.  
  1218. `-sob'
  1219. `--swallow-optional-blank-lines'
  1220.      Swallow optional blank lines.
  1221.      *Note Blank lines::.
  1222.  
  1223. `-ss'
  1224. `--space-special-semicolon'
  1225.      On one-line `for' and `while' statments, force a blank before the
  1226.       semicolon.
  1227.      *Note Statements::.
  1228.  
  1229. `-st'
  1230. `--standard-output'
  1231.      Write to standard output.
  1232.      *Note Invoking indent::.
  1233.  
  1234. `-T'
  1235.      Tell `indent' the name of typenames.
  1236.      *Note Declarations::.
  1237.  
  1238. `-tsN'
  1239. `--tab-sizeN'
  1240.      Set tab size to N spaces.
  1241.      *Note Indentation::.
  1242.  
  1243. `-v'
  1244. `--verbose'
  1245.      Enable verbose mode.
  1246.      *Note Miscellaneous options::.
  1247.  
  1248. `-version'
  1249.      Output the version number of `indent'.
  1250.      *Note Miscellaneous options::.
  1251.  
  1252. Options Cross Key
  1253. ------------------
  1254.  
  1255.    Here is a list of options alphabetized by long option, to help you
  1256. find the corresponding short option.
  1257.  
  1258.      --blank-lines-after-block-comments              -bbb
  1259.      --blank-lines-after-commas                      -bc
  1260.      --blank-lines-after-declarations                -bad
  1261.      --blank-lines-after-procedures                  -bap
  1262.      --braces-after-if-line                          -bl
  1263.      --brace-indent                                  -bli
  1264.      --braces-on-if-line                             -br
  1265.      --case-indentation                              -cliN
  1266.      --comment-delimiters-on-blank-lines             -cdb
  1267.      --comment-indentation                           -cN
  1268.      --continuation-indentation                      -ciN
  1269.      --continue-at-parentheses                       -lp
  1270.      --cuddle-else                                   -ce
  1271.      --declaration-comment-column                    -cdN
  1272.      --declaration-indentation                       -diN
  1273.      --dont-break-procedure-type                     -npsl
  1274.      --dont-cuddle-else                              -nce
  1275.      --dont-format-comments                          -nfca
  1276.      --dont-format-first-column-comments             -nfc1
  1277.      --dont-line-up-parentheses                      -nlp
  1278.      --dont-space-special-semicolon                  -nss
  1279.      --dont-star-comments                            -nsc
  1280.      --else-endif-column                             -cpN
  1281.      --format-all-comments                           -fca
  1282.      --format-first-column-comments                  -fc1
  1283.      --gnu-style                                     -gnu
  1284.      --ignore-profile                                -npro
  1285.      --indent-level                                  -iN
  1286.      --k-and-r-style                                 -kr
  1287.      --leave-optional-blank-lines                    -nsob
  1288.      --leave-preprocessor-space                      -lps
  1289.      --line-comments-indentation                     -dN
  1290.      --line-length                                   -lN
  1291.      --no-blank-lines-after-commas                   -nbc
  1292.      --no-blank-lines-after-declarations             -nbad
  1293.      --no-blank-lines-after-procedures               -nbap
  1294.      --no-comment-delimiters-on-blank-lines          -ncdb
  1295.      --no-space-after-casts                          -ncs
  1296.      --no-parameter-indentation                      -nip
  1297.      --no-space-after-function-call-names            -npcs
  1298.      --no-verbosity                                  -nv
  1299.      --original                                      -orig
  1300.      --parameter-indentation                         -ipN
  1301.      --procnames-start-lines                         -psl
  1302.      --space-after-cast                              -cs
  1303.      --space-after-procedure-calls                   -pcs
  1304.      --space-special-semicolon                       -ss
  1305.      --standard-output                               -st
  1306.      --start-left-side-of-comments                   -sc
  1307.      --swallow-optional-blank-lines                  -sob
  1308.      --tab-size                                      -tsN
  1309.      --verbose                                       -v
  1310.  
  1311.